package cn.luke.basic.utils;

import cn.luke.basic.exceptions.MyException;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Field;

/**
 * @Author: lmf
 * @Create: 2025/5/2 11:10
 * @module
 */
@Slf4j
public class UtilsEnum {
    /**
     * 检查给定的枚举类中是否存在具有指定字段值的枚举常量。
     */
    public static <T extends Enum<T>, V> void existsInEnum(Class<T> emuClass, V value) {
        existsInEnum(emuClass, value, "code");
    }


    /**
     * 检查给定的枚举类中是否存在具有指定字段值的枚举常量。
     */
    public static <T extends Enum<T>, V> void existsInEnum(Class<T> emuClass, V value, String fieldName) {
        // 遍历枚举类中的所有枚举常量
        for (T enumConstant : emuClass.getEnumConstants()) {
            V enumValue = null;
            try {
                final Field field = enumConstant.getClass().getDeclaredField(fieldName);
                // 设置字段可访问
                field.setAccessible(true);
                // 尝试获取枚举常量的指定字段值
                enumValue = (V) field.get(enumConstant);
                // 比较字段值，如果匹配则返回
                if (enumValue.equals(value)) {
                    return;
                }
            } catch (IllegalAccessException | NoSuchFieldException e) {
                // 如果访问字段失败，记录错误日志
                log.error("枚举验证异常", e);
            }
        }
        throw new MyException("状态异常");
    }
}
